package now;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

import javax.swing.JOptionPane;

/**
 * 创建一个 ServerSocket 长连接
 * Created by zhangpeng on 2017/2/12.
 */

public class ServerListener extends Thread {
    private static final int PORT=12345;
    @Override
    public void run() {
       runSocket();
    }


    private  void runSocket(){
        try {
            //创建 ServerSocket 对象，指定程序端口
            //端口范围为1-65536 尽量使用大数，避免与系统程序端口冲突
            //服务端运行一次产生一个 ServerSocket 对象
            ServerSocket serverSocket=new ServerSocket(PORT);
            while (true){
                //该方法为阻塞方法，即如果客户端没有发来请求处于阻塞状态
                //所以该方法不能在主线程中调用，防止阻塞
                //每调用一次返回一个 Socket 对象,所以这里采取死循环来来读取 Socket 对象
                //即一直在等待读取客户端请求,因为可能是多个客户端在请求，所以一个 SocketServer
                //可以得到多个 Socket 对象
                //每当一个客户端与服务端连接就会产生一个 Socket 对象
                //即在测试的时候每当执行一个命令 telnet localhost 12345 就会产生一个
                Socket socket=serverSocket.accept();
                //建立连接成功后执行方法
                //该方法是在 Socket 接到客户端请求连接成功后弹出对话框
                JOptionPane.showMessageDialog(null,"有客户端连接到了本机端口12345");
                //将获取到的 Socket 对象放到新的线程中去处理,从服务端发送消息到客户端
//                new ChatSocket(socket).start();
                ChatToSocket chatToSocket=new ChatToSocket(socket);
                chatToSocket.start();
                //添加到集合
                SocketManager.getInstance().addSocket(chatToSocket);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
